1
เกินกว่าบทความ
AI008Lecture 2
00:07

การสร้างสะพานข้ามช่องว่างระหว่างการอ่านงานวิจัยอย่างผู้ชมที่ไม่ได้มีส่วนร่วม กับการบรรลุความเชี่ยวชาญด้านวิศวกรรมนั้น จำเป็นต้องเจาะลึกเข้าไปในหัวใจทางคณิตศาสตร์ของโมเดลแปลง (Transformer) โดยการเปลี่ยนจากการเข้าใจเชิงทฤษฎีมาสู่การประยุกต์ใช้งานจริง เป็นเพียงวิธีเดียวในการถอดรหัสความซับซ้อนที่ซ่อนอยู่ในพื้นที่ลักษณะแบบมิติสูง

1. หลักเหตุผลทางคณิตศาสตร์ของการปรับขนาด

กลไกหลักของโมเดลภาษาสมัยใหม่คือ การจัดลำดับความสำคัญโดยการคูณจุดที่ปรับขนาดแล้ว. รายละเอียดด้านวิศวกรรมที่สำคัญซึ่งมักถูกมองข้ามในทฤษฎีคือ กฎการปรับขนาด:

  • คะแนนความสนใจดิบต้องหารด้วยรากที่สองของขนาดมิติของคีย์ (dk).
  • ทำไม? ซึ่งป้องกันไม่ให้ผลคูณจุดใหญ่เกินไป ซึ่งจะทำให้ฟังก์ชันโซฟต์แม็กซ์เข้าสู่พื้นที่ที่มี เกรเดียนต์ที่เล็กมากซึ่งทำให้ความสามารถของโมเดลในการเรียนรู้ในระหว่างกระบวนการถ่ายโอนย้อนกลับแทบจะหมดไป

2. จากทฤษฎีสู่การดำเนินการด้วยเทนเซอร์

การเข้าใจเชิงวิศวกรรมเกี่ยวข้องกับการเปลี่ยนจากวงจรแนวคิดไปสู่ การคูณเมทริกซ์แบบขนานที่มีประสิทธิภาพสูง.

  • การใส่ข้อมูลลำดับ: แตกต่างจากโมเดลแบบ RNN ที่มีลำดับโดยธรรมชาติ แต่โมเดลแปลงไม่มีความเข้าใจในลำดับ วิศวกรต้องเขียนโค้ดฟังก์ชันไซน์และโคไซน์เอง (การเข้ารหัสตำแหน่ง) เพื่อใส่ข้อมูลลำดับ
  • กลไกความมั่นคง: การประยุกต์ใช้งานต้องอาศัยการใช้อย่างมีกลยุทธ์ การเชื่อมต่อแบบคงที่ และ การปกติแบบเลเยอร์ (LayerNorm) เพื่อต่อต้านการเปลี่ยนแปลงของตัวแปรภายในและรับประกันว่ากระบวนการฝึกอบรมจะคงความมั่นคง
ข้อคิดเชิงวิศวกรรม
ความเชี่ยวชาญแท้จริงเกิดขึ้นจากการเขียนโปรแกรมทีละบรรทัด ถ้าพึ่งพาเอกสารทางวิชาการเพียงอย่างเดียว มักนำไปสู่ความเข้าใจผิดเกี่ยวกับเสถียรภาพของเกรเดียนต์และความสามารถในการคำนวณ
การนำเสนองานด้วยภาษาไพธอน (PyTorch)
1
import torch
2
import torch.nn as nn
3
import math
4
5
def scaled_dot_product_attention(query, key, value):
6
# Calculate d_k (dimension of keys)
7
d_k = query.size(-1)
8
9
# Calculate raw attention scores
10
# Transitioning from naive loops to matrix multiplication
11
scores = torch.matmul(query, key.transpose(-2, -1))
12
13
# Apply the Scaling Rule to prevent infinitesimal gradients
14
scaled_scores = scores / math.sqrt(d_k)
15
16
# Apply Softmax to get attention weights
17
attention_weights = torch.softmax(scaled_scores, dim=-1)
18
19
# Output is the weighted sum of values
20
return torch.matmul(attention_weights, value)